www.pudn.com > gamedata.rar > game.c
#include "stdafx.h"
extern struct OBJECT_INFO object_info[MAX_NUM_OBJ];
extern struct COMMAND_INFO Command_info[MAX_NUM_COMMAND];
extern signed long citizen_code[11][10];
extern struct NOVELITY_MAP_INFO map[MAX_NUM_MAP];
extern struct optiondata option;
extern long spell_code[MAX_NUM_SPELL][6];
// 公告牌
void advertisementgame(SOCKET s, LPBYTE lpTarget)
{
;
}
signed long getcost(int index, signed long cost, int taxation, BOOL team)
{
float f;
signed long money;
if (team)
{
f = (float)(citizen_code[object_info[index].citizenlevel][4] / 100.0);
money = (signed long)(cost - cost * f);
f = (float)(citizen_code[object_info[index].citizenlevel][5] / 100.0);
money += (signed long)(cost * f);
f = (float)(taxation / 100.0);
money += (signed long)(cost * f);
}
else
{
f = (float)(citizen_code[object_info[index].citizenlevel][4] / 100.0);
money = (signed long)(cost - cost * f);
f = (float)(citizen_code[object_info[index].citizenlevel][5] / 100.0);
money += (signed long)(cost * f);
}
return money;
}
// 得到买的物品的价格
signed long getnovelitycost(int index, int command, BYTE code1, BYTE code2)
{
int i, j, z;
for (i=0;i= 1)
{
a = (float)((money1 * 0.8) / (float)status1);
b = a * (float)status2;
return (signed long)((money1 * 0.8) - b);
}
}
else
{
if (status1 >= 1)
{
a = (float)((money1 * 0.8) / (float)status1);
b = a * (float)status2;
return (signed long)(b * 0.5 + money1 * 0.2);
}
else
{
return (signed long)(money1 * 0.5);
}
}
return -1;
}
// 得到卖的物品的价格
signed long getnovelitysell(int index, int command, BYTE code1, BYTE code2, int status, struct NOVELITY_INFO novelity_info)
{
int i, j;
for(i=0;i= number)
{
status = (int)object_info[n].Novelity[b][4] + (int)object_info[n].Novelity[b][5] * 256;
money1 = getnovelitysell(n, object_info[n].command, object_info[n].Novelity[b][2], object_info[n].Novelity[b][3], status, novelity_info);
novelity.number = novelity.number - number;
money += number * money1;
setuserNovelityinfo(n, b, novelity);
code[m][0] = b;
for(j=0;j<17;j++)
code[m][j+1] = object_info[n].Novelity[b][j];
m ++;
}
else
{
sysmessage(s, 0x01, "含有非法数据,警告用户", 0, FALSE); break;
}
}
}
}
setnovelityinfo(s, m, code, 0, FALSE);
object_info[n].money += money;
setusermoneynumber(s, object_info[n].money);
return 0;
}
// 买东西的判断
int TFbuy(SOCKET s, LPBYTE lpTarget)
{
// 00 01 02 03 04 05 06 07 08 09
// 55 01 00 00 85 01 00 03 00 1C 00 01 00 1D 00 02 00 1E 00 02 00 买东西
int i, j, n, a, tmp, number, m, z;
long money, money1;
BYTE b, c, d, e;
BYTE code[39][18];
BYTE buf[4];
struct NOVELITY novelity;
struct NOVELITY_INFO novelity_info;
n = find_obj(s);
if (n == MAX_NUM_USER) return -1;
m = 0;
a = 0;
if (object_info[n].money <= 0) return -1;
money = 0;
for(i=0;i<(int)lpTarget[7];i++)
{
a ++;
b = lpTarget[8 + a];
a ++;
c = lpTarget[8 + a];
a ++;
d = lpTarget[8 + a];
a ++;
e = lpTarget[8 + a];
number = d + e * 256;
novelity_info = getNovelity_info(b, c);
if (novelity_info.have)
{
// if (novelity.have)
{
// if(novelity.number >= number)
{
// novelity.number = novelity.number + number;
// money = money + number * novelity_info.money;
// 寻找现成的物品栏存放着的
tmp = getusernovelitysitesame(n, b, c);
if ((tmp != 34) && (novelity_info.reside2 == 0))
{
//MessageBoxA(NULL, "1", "", 0);
novelity = getuserNovelityinfo(n, tmp);
novelity.number = novelity.number + number;
if (novelity.number > MAX_ME_NOVELITY)
{
sysmessage(s, 0x02, "同类物品超限", 0, FALSE); break;
}
else
{
money1 = getnovelitycost(n, object_info[n].command, b, c);
if (money1 == -1) { sysmessage(s, 0x02, "购买非法物品", 0, FALSE); break; }
else
{
if (money + money1 > object_info[n].money) { sysmessage(s, 0x02, "金币不足", 0, FALSE); break; }
else
{
money += money1 * number;
}
}
}
setuserNovelityinfo(n, tmp, novelity);
code[m][0] = tmp;
for(j=0;j<17;j++)
code[m][j+1] = object_info[n].Novelity[tmp][j];
m ++;
}
else
{
tmp = getusernovelitysiteblank(n);
if (tmp != 34)
{
if (novelity_info.reside2 == 0)
{
money1 = getnovelitycost(n, object_info[n].command, b, c);
if (money1 == -1) { sysmessage(s, 0x02, "购买非法物品", 0, FALSE); break; }
else
{
if (money + money1 > object_info[n].money) { sysmessage(s, 0x02, "金币不足", 0, FALSE); break; }
else
{
money += money1 * number;
}
}
//MessageBoxA(NULL, "2", "", 0);
Encode2(buf, novelity_info.level);
object_info[n].Novelity[tmp][0] = buf[1];
object_info[n].Novelity[tmp][1] = buf[0];
object_info[n].Novelity[tmp][2] = b;
object_info[n].Novelity[tmp][3] = c;
Encode2(buf, novelity_info.durable);
object_info[n].Novelity[tmp][4] = buf[1];
object_info[n].Novelity[tmp][5] = buf[0];
object_info[n].Novelity[tmp][6] = 0x00;
object_info[n].Novelity[tmp][7] = 0x00;
Encode2(buf, number);
object_info[n].Novelity[tmp][8] = buf[1];
object_info[n].Novelity[tmp][9] = buf[0];
object_info[n].Novelity[tmp][10] = 0x00;
object_info[n].Novelity[tmp][11] = 0x00;
object_info[n].Novelity[tmp][12] = 0x00;
object_info[n].Novelity[tmp][13] = 0x00;
object_info[n].Novelity[tmp][14] = 0x00;
object_info[n].Novelity[tmp][15] = 0x00;
object_info[n].Novelity[tmp][16] = 0x00;
code[m][0] = tmp;
for(j=0;j<17;j++)
code[m][j+1] = object_info[n].Novelity[tmp][j];
m ++;
}
else
{
for(j=0;j object_info[n].money) { sysmessage(s, 0x02, "金币不足", 0, FALSE); break; }
else
{
money += money1;
}
}
//MessageBoxA(NULL, "3", "", 0);
Encode2(buf, novelity_info.level);
object_info[n].Novelity[tmp][0] = buf[1];
object_info[n].Novelity[tmp][1] = buf[0];
object_info[n].Novelity[tmp][2] = b;
object_info[n].Novelity[tmp][3] = c;
Encode2(buf, novelity_info.durable);
object_info[n].Novelity[tmp][4] = buf[1];
object_info[n].Novelity[tmp][5] = buf[0];
object_info[n].Novelity[tmp][6] = 0x00;
object_info[n].Novelity[tmp][7] = 0x00;
object_info[n].Novelity[tmp][8] = 0x01;
object_info[n].Novelity[tmp][9] = 0x00;
object_info[n].Novelity[tmp][10] = 0x00;
object_info[n].Novelity[tmp][11] = 0x00;
object_info[n].Novelity[tmp][12] = 0x00;
object_info[n].Novelity[tmp][13] = 0x00;
object_info[n].Novelity[tmp][14] = 0x00;
object_info[n].Novelity[tmp][15] = 0x00;
object_info[n].Novelity[tmp][16] = 0x00;
code[m][0] = tmp;
for(z=0;z<17;z++)
code[m][z+1] = object_info[n].Novelity[tmp][z];
m ++;
}
else
{
sysmessage(s, 0x02, "物品栏空间已满", 0, FALSE); break;
}
}
}
}
else
{
sysmessage(s, 0x02, "物品栏空间已满", 0, FALSE); break;
}
}
}
// else
{
// sysmessage(s, 0x01, "含有非法数据,警告用户", 0, FALSE); break;
}
}
}
}
setnovelityinfo(s, m, code, 0, FALSE);
object_info[n].money -= money;
setusermoneynumber(s, object_info[n].money);
return 0;
}
// 对修理的判断
int TFrepair(SOCKET s, LPBYTE lpTarget)
{
// 00 01 02 03 04 05 06 07 08 09 10 11 12
// 3E 02 00 00 8B 00 00 06 00 00 00 01 00 08 00 09 00 0A 00 1A 00
int i, j, n, a, m;
long money;
BYTE b, c;
BYTE code[39][18];
struct NOVELITY novelity;
struct NOVELITY_INFO novelity_info;
n = find_obj(s);
if (n == MAX_NUM_USER) return -1;
m = 0;
a = 0;
money = 0;
for(i=0;i<(int)lpTarget[7];i++)
{
a ++;
b = lpTarget[8 + a];
a ++;
c = lpTarget[8 + a];
novelity_info = getNovelity_info(object_info[n].Novelity[b][2], object_info[n].Novelity[b][3]);
if ((novelity_info.have) &&
(((novelity_info.reside2 >= 1) &&
(novelity_info.reside2 <= 8)) || (novelity_info.sell == 1)))
{
novelity = getuserNovelityinfo(n, b);
if (novelity.have)
{
// if(novelity.number >= number)
{
if (object_info[n].money < money) { sysmessage(s, 0x02, "金币不足", 0, FALSE); break; }
money += getrepaircost(n, b, novelity_info, novelity.status);
novelity.status = novelity_info.durable;
setuserNovelityinfo(n, b, novelity);
code[m][0] = b;
for(j=0;j<17;j++)
code[m][j+1] = object_info[n].Novelity[b][j];
m ++;
}
}
}
}
setnovelityinfo(s, m, code, 0, FALSE);
object_info[n].money -= money;
setusermoneynumber(s, object_info[n].money);
return 0;
}
void sendlearnspellinfo(SOCKET s, BYTE code[11])
{
// 55 06 00 00 8E 01 01 00 00 00 现在的状态
BYTE lpSource[128];
int i, a, number;
number = 0;
for(i=0;i<11;i++)
if (code[i] != 0xFF) number++;
memset(lpSource, 0x00, sizeof(lpSource));
lpSource[0] = 0x00;
lpSource[1] = 0x00;
lpSource[2] = 0x00;
lpSource[3] = 0x00;
lpSource[4] = 0x8E;
lpSource[5] = 0x01;
lpSource[6] = number;
lpSource[7] = 0x00;
a = 0;
for(i=0;i<11;i++)
{
if (code[i] != 0xFF)
{
a ++;
lpSource[7 + a] = code[i];
a ++;
lpSource[7 + a] = 0x00;
}
}
//53 06 00 00 6A 00 00 00 00 战斗经验没有了!
add_pack_chain(s, lpSource, 8 + number * 2, 0, FALSE);
//
}
// 学习魔法
int TFlearnspell(SOCKET s, LPBYTE lpTarget)
{
// 00 01 02 03 04 05 06 07 08 09 10
// 3E 03 00 00 8D 02 00 01 00 00 00 发送数据 学习体力恢复
BYTE code[11];
long money, fight_exp;
int i, j, n, a, index;
n = find_obj(s);
if (n == MAX_NUM_USER) return -1;
if (lpTarget[5] == 0x02)
{
money = 0;
fight_exp =0;
index = 9;
a = 0;
for (i=0;i= money) && (object_info[n].fight_exp >= fight_exp))
{
a = 0;
for(i=0;i status) && (((novelity_info.reside2 >= 1) &&
(novelity_info.reside2 <= 8)) || (novelity_info.sell == 1)))
{
repair_info[count].Now1 = i;
repair_info[count].Now2 = 0;
repair_info[count].status = status;
repair_info[count].money = getrepaircost(n, i, novelity_info, status);
count++;
}
}
sendrepair1(s, count, repair_info);
}
}
else if (Command_info[m].command == 4) // 学习魔法
{
if ((object_info[n].menow1 == Code1) &&
(object_info[n].menow2 == Code2) &&
(object_info[n].menow1 == Command_info[m].do_[0]) &&
(object_info[n].menow2 == Command_info[m].do_[1]))
{
info = object_info[n];
learnspell(s, info);
}
}
else if (Command_info[m].command == 5) // 私人银行
{
if ((object_info[n].menow1 == Code1) &&
(object_info[n].menow2 == Code2) &&
(object_info[n].menow1 == Command_info[m].do_[0]) &&
(object_info[n].menow2 == Command_info[m].do_[1]))
{
openprivatewarehouse(s);
}
}
else if (Command_info[m].command == 6) // 综合银行
{
if ((object_info[n].menow1 == Code1) &&
(object_info[n].menow2 == Code2) &&
(object_info[n].menow1 == Command_info[m].do_[0]) &&
(object_info[n].menow2 == Command_info[m].do_[1]))
{
if (object_info[n].level >= Command_info[m].level)
{
openpublicwarehouse(s);
}
else
{
sysmessage(s, 0x01, "10级以上才可以使用", 0, FALSE); return -1;
}
}
}
else if (Command_info[m].command == 10)
{
// 军团仓库
if ((object_info[n].menow1 == Code1) &&
(object_info[n].menow2 == Code2) &&
(object_info[n].menow1 == Command_info[m].do_[0]) &&
(object_info[n].menow2 == Command_info[m].do_[1]))
{
}
}
else if (Command_info[m].command == 11)
{
// 建立军团
if ((object_info[n].menow1 == Code1) &&
(object_info[n].menow2 == Code2) &&
(object_info[n].menow1 == Command_info[m].do_[0]) &&
(object_info[n].menow2 == Command_info[m].do_[1]))
{
}
}
else if (Command_info[m].command == 13) // 商店卖消耗品
{
if ((object_info[n].menow1 == Code1) &&
(object_info[n].menow2 == Code2) &&
(object_info[n].menow1 == Command_info[m].do_[0]) &&
(object_info[n].menow2 == Command_info[m].do_[1]))
{
count = 0;
for(i=10;i<34;i++)
{
a = object_info[n].Novelity[i][4];
b = object_info[n].Novelity[i][5];
status = a + b * 255 + b;
novelity_info = getNovelity_info(object_info[n].Novelity[i][2], object_info[n].Novelity[i][3]);
if ((novelity_info.have) && (novelity_info.sell == 2))
{
sell[count].Now1 = i;
sell[count].Now2 = 0;
sell[count].status = status;
sell[count].sell = getnovelitysell(n, m, object_info[n].Novelity[i][2], object_info[n].Novelity[i][3], status, novelity_info);
count++;
}
}
sellnovelity(s, count, sell);
}
}
else if (Command_info[m].command == 14)
{
// 生命,体力,魔法恢复
if ((object_info[n].menow1 == Code1) &&
(object_info[n].menow2 == Code2) &&
(object_info[n].menow1 == Command_info[m].do_[0]) &&
(object_info[n].menow2 == Command_info[m].do_[1]))
{
if ((!object_info[n].died) && (object_info[n].status))
{
if ((object_info[n].life_now >= object_info[n].life_max) &&
(object_info[n].mental_now >= object_info[n].mental_max) &&
(object_info[n].brawn_now >= object_info[n].brawn_max))
{
sysmessage(s, 0x01, "您非常健康,不需要治疗", 0, FALSE);
return 0;
}
if (object_info[n].money >= Command_info[m].money)
{
object_info[n].life_now = object_info[n].life_max;
object_info[n].mental_now = object_info[n].mental_max;
object_info[n].brawn_now = object_info[n].brawn_max;
object_info[n].money = object_info[n].money - Command_info[m].money;
info = object_info[n];
setusermoneynumber(s, info.money);
remedyall(s, info);
sysmessage(s, 0x01, "治疗完毕", 0, FALSE);
}
else
sysmessage(s, 0x01, "金钱不足", 0, FALSE);
}
}
}
else if (Command_info[m].command == 15)
{
// 生命,体力,魔法恢复 剑包和枪包恢复
if ((object_info[n].menow1 == Code1) &&
(object_info[n].menow2 == Code2) &&
(object_info[n].menow1 == Command_info[m].do_[0]) &&
(object_info[n].menow2 == Command_info[m].do_[1]))
{
if (object_info[n].level > Command_info[m].level)
{
sysmessage(s, 0x01, "这项服务不提供给高等级的用户", 0, FALSE);
return 0;
}
if ((!object_info[n].died) && (object_info[n].status))
{
if ((object_info[n].life_now >= object_info[n].life_max) &&
(object_info[n].mental_now >= object_info[n].mental_max) &&
(object_info[n].brawn_now >= object_info[n].brawn_max))
{
sysmessage(s, 0x01, "您非常健康,不需要治疗", 0, FALSE);
return 0;
}
// if (object_info[n].money >= Command_info[m].money)
{
object_info[n].life_now = object_info[n].life_max;
object_info[n].mental_now = object_info[n].mental_max;
object_info[n].brawn_now = object_info[n].brawn_max;
if ((object_info[n].job == 2) || (object_info[n].job == 3))
{
if ((object_info[n].Novelity[4][2] != 0xFF) || (object_info[n].Novelity[4][3] != 0xFF))
{
Encode2(buf, 250);
object_info[n].Novelity[4][6] = buf[1];
object_info[n].Novelity[4][7] = buf[0];
}
}
info = object_info[n];
remedyall(s, info);
if ((object_info[n].job == 2) || (object_info[n].job == 3))
if ((object_info[n].Novelity[4][2] != 0xFF) || (object_info[n].Novelity[4][3] != 0xFF))
setbulletnumber(s, 4, 250);
sysmessage(s, 0x01, "治疗完毕", 0, FALSE);
}
}
}
}
else if (Command_info[m].command == 16)
{
// 中毒,异常治疗
if ((object_info[n].menow1 == Code1) &&
(object_info[n].menow2 == Code2) &&
(object_info[n].menow1 == Command_info[m].do_[0]) &&
(object_info[n].menow2 == Command_info[m].do_[1]))
{
}
}
else if (Command_info[m].command == 17)
{
// npc 命令移动
if ((object_info[n].menow1 == Code1) &&
(object_info[n].menow2 == Code2) &&
(object_info[n].menow1 == Command_info[m].do_[0]) &&
(object_info[n].menow2 == Command_info[m].do_[1]))
{
if (Command_info[m].have)
{
if (object_info[n].money < Command_info[m].money)
{
sysmessage(s, 0x01, "金钱不足", 0, FALSE);
return 0;
}
for(i=0;i 0)
{
number --;
setbulletnumber(object_info[n].s, 4, number);
Encode2(buf, number);
object_info[n].Novelity[4][6] = buf[1];
object_info[n].Novelity[4][7] = buf[0];
return 0;
}
else
{
return -1;
}
}
return 0;
}