void SendScore(int conn) { MSG_UpdateScore sm_vus; memset(&sm_vus, 0, sizeof(MSG_UpdateScore)); sm_vus.Type = _MSG_UpdateScore; if (conn < MAX_USER) { sm_vus.CurrHp = pMob[conn].MOB.CurrentScore.Hp; sm_vus.CurrMp = pMob[conn].MOB.CurrentScore.Mp; } sm_vus.Size = sizeof(MSG_UpdateScore); sm_vus.ID = conn; memcpy(&sm_vus.Score, &pMob[conn].MOB.CurrentScore, sizeof(STRUCT_SCORE)); sm_vus.Critical = pMob[conn].MOB.Critical; sm_vus.SaveMana = pMob[conn].MOB.SaveMana; sm_vus.Guild = pMob[conn].MOB.Guild; sm_vus.GuildLevel = pMob[conn].MOB.GuildLevel; GetAffect(sm_vus.Affect, pMob[conn].Affect); sm_vus.Resist[0] = pMob[conn].MOB.Resist[0]; sm_vus.Resist[1] = pMob[conn].MOB.Resist[1]; sm_vus.Resist[2] = pMob[conn].MOB.Resist[2]; sm_vus.Resist[3] = pMob[conn].MOB.Resist[3]; sm_vus.Special[0] = 0xCC; sm_vus.Special[1] = 0xCC; sm_vus.Special[2] = 0xCC; sm_vus.Special[3] = 0xCC; sm_vus.Magic = pMob[conn].MOB.Magic; if (pMob[conn].GuildDisable) sm_vus.Guild = 0; if (BrState != 0) { if (conn < MAX_USER) { int posX = pMob[conn].TargetX; int posY = pMob[conn].TargetY; if (posX >= 2604 && posY >= 1708 && posX <= 2648 && posY <= 1744) { sm_vus.Guild = 0; sm_vus.GuildLevel = 0; } } } GridMulticast(pMob[conn].TargetX, pMob[conn].TargetY, (MSG_STANDARD*)&sm_vus, 0); SendAffect(conn); }
int GetCreateMob(int mob, MSG_CreateMob *sm) { memset(sm, 0, sizeof(MSG_CreateMob)); sm->Type = _MSG_CreateMob; strncpy(sm->MobName, pMob[mob].MOB.MobName, NAME_LENGTH); if (mob < MAX_USER) { int ck = GetCurKill(mob); int tk = GetTotKill(mob); unsigned char cv = ck; unsigned char cv1 = tk % 256; unsigned char cv2 = tk / 256; sm->MobName[13] = cv; sm->MobName[14] = cv1; sm->MobName[15] = cv2; int chaos = GetPKPoint(mob); int gv = GetGuilty(mob); if (gv > 0) chaos = 0; cv = chaos; sm->MobName[12] = chaos; } sm->PosX = pMob[mob].TargetX; sm->PosY = pMob[mob].TargetY; sm->Size = sizeof(MSG_CreateMob); sm->ID = ESCENE_FIELD; sm->MobID = mob; sm->ClientTick = CurrentTime; sm->Score = pMob[mob].MOB.CurrentScore; sm->Guild = pMob[mob].MOB.Guild; sm->GuildMemberType = pMob[mob].MOB.GuildLevel; if (pMob[mob].GuildDisable == 1) { sm->Guild = 0; sm->GuildMemberType = 0; } if (mob >= MAX_USER) { if (pMob[mob].MOB.Clan == 4) sm->Score.Ac = 0; else sm->Score.Ac = 1; } sm->CreateType = 0; if (pMob[mob].MOB.GuildLevel == 9) sm->CreateType = sm->CreateType | 0x80; else if (pMob[mob].MOB.GuildLevel >= 6) sm->CreateType = sm->CreateType | 0x40; sm->Hold = pMob[mob].extra.Hold; strncpy(sm->Tab, pMob[mob].Tab, 26); int selfdead = 0; int xx = pMob[mob].TargetX; int yy = pMob[mob].TargetY; for (int i = 0; i < MAX_EQUIP; i++) { STRUCT_ITEM *item = &pMob[mob].MOB.Equip[i]; sm->Equip[i] = BASE_VisualItemCode(item, i); sm->AnctCode[i] = BASE_VisualAnctCode(item); if (i == 14 && sm->Equip[i] >= 2360 && sm->Equip[i] < 2390 && pMob[mob].MOB.Equip[i].stEffect[0].sValue <= 0) { sm->Equip[i] = 0; selfdead = 1; continue; } if (i == 14 && sm->Equip[i] >= 2360 && sm->Equip[i] < 2390) { int sanc = pMob[mob].MOB.Equip[i].stEffect[1].cEffect; sanc = sanc / 10; if (sanc > 13) sanc = 13; if (sanc < 0) sanc = 0; sanc = sanc << 12; sm->Equip[i] = sm->Equip[i] + sanc; continue; } } GetAffect(sm->Affect, pMob[mob].Affect); if (BrState != 0 && xx >= 2604 && yy >= 1708 && xx <= 2648 && yy <= 1744) { memset(sm->MobName, 0, NAME_LENGTH); // MOBNAME_LEGNTH = 16 strncpy(sm->MobName, "??????", 6); sm->Equip[15] = 0; sm->Guild = 0; } return selfdead; }
int GetCreateMobTrade(int mob, MSG_CreateMobTrade *sm) { sm->Type = _MSG_CreateMobTrade; strncpy(sm->MobName, pMob[mob].MOB.MobName, NAME_LENGTH); if(mob >= MAX_USER) { Log("err,getcreatemob request by non player %d", pMob[mob].MOB.MobName, 0); return 0; } if (mob < MAX_USER) { int ck = GetCurKill(mob); int tk = GetTotKill(mob); unsigned char cv = ck; unsigned char cv1 = tk%256; unsigned char cv2 = tk/256; sm->MobName[13] = cv; sm->MobName[14] = cv1; sm->MobName[15] = cv2; int chaos = GetPKPoint(mob); cv = chaos; sm->MobName[12] = cv; } sm->PosX = pMob[mob].TargetX; sm->PosY = pMob[mob].TargetY; sm->Size = sizeof(MSG_CreateMobTrade); sm->ID = ESCENE_FIELD; sm->MobID = mob; sm->ClientTick = CurrentTime; memcpy(&sm->Score, &pMob[mob].MOB.CurrentScore, sizeof(STRUCT_SCORE)); sm->Guild = pMob[mob].MOB.Guild; if (pMob[mob].GuildDisable == 1) sm->Guild = 0; if (mob >= MAX_USER) sm->Score.Ac = pMob[mob].MOB.Clan != 4; sm->CreateType = 0; if (pMob[mob].MOB.GuildLevel == 9) sm->CreateType = sm->CreateType | 0x80; if (pMob[mob].MOB.GuildLevel != 0) sm->CreateType = sm->CreateType | 0x40; int selfdead=0; for (int i = 0; i < MAX_EQUIP; i++) { STRUCT_ITEM *item = &pMob[mob].MOB.Equip[i]; sm->Equip[i] = BASE_VisualItemCode(item, i); sm->AnctCode[i] = BASE_VisualAnctCode(item); if (i == 14 && sm->Equip[i] >= 2360 && sm->Equip[i] < 2390 && pMob[mob].MOB.Equip[i].stEffect[0].sValue <= 0) { sm->Equip[i] = 0; selfdead = 1; continue; } if (i == 14 && sm->Equip[i] >= 2360 && sm->Equip[i] < 2390) { int sanc = pMob[mob].MOB.Equip[i].stEffect[1].cEffect; sanc = sanc / 10; if (sanc > 13) sanc = 13; if (sanc < 0) sanc = 0; sanc = sanc << 12; sm->Equip[i] = sm->Equip[i] + sanc; continue; } } strncpy(sm->Tab, pMob[mob].Tab, 26); strncpy(sm->Desc, pUser[mob].AutoTrade.Title, MAX_AUTOTRADETITLE-1); GetAffect(sm->Affect,pMob[mob].Affect); return selfdead; }
int CInterpreter::GetID( char *id_name ) { int id; id = FindSymbol( id_name, m_IDKeywords ); if ( id == -1 ) return Error("'%s' : unknown identifier", id_name); //FIXME: Function pointers would be awfully nice.. but not inside a class! Weee!! switch (id) { //Affect takes control of an entity case ID_AFFECT: return GetAffect(); break; //Wait for a specified amount of time case ID_WAIT: return GetWait(); break; //Generic set call case ID_SET: return GetSet(); break; case ID_LOOP: return GetLoop(); break; case ID_PRINT: return GetPrint(); break; case ID_USE: return GetUse(); break; case ID_FLUSH: return GetFlush(); break; case ID_RUN: return GetRun(); break; case ID_KILL: return GetKill(); break; case ID_REMOVE: return GetRemove(); break; case ID_CAMERA: return GetCamera(); break; case ID_SOUND: return GetSound(); break; case ID_MOVE: return GetMove(); break; case ID_ROTATE: return GetRotate(); break; case ID_IF: return GetIf(); break; case ID_ELSE: //return Error("syntax error : else without matching if"); return GetElse(); //FIXME: Protect this call so that floating else's aren't allowed break; case ID_GET: return Error("syntax error : illegal use of \"get\""); break; case ID_TAG: return Error("syntax error : illegal use of \"tag\""); break; case ID_TASK: return GetTask(); break; case ID_DO: return GetDo(); break; case ID_DECLARE: return GetDeclare(); break; case ID_FREE: return GetFree(); break; case ID_REM: GetRem(); break; case ID_DOWAIT: GetDoWait(); break; case ID_SIGNAL: GetSignal(); break; case ID_WAITSIGNAL: GetWaitSignal(); break; case ID_PLAY: GetPlay(); //Bad eighties slang joke... yeah, it's not really funny, I know... break; //Local variable types case TK_FLOAT: case TK_INT: case TK_STRING: case TK_VECTOR: GetVariable( id ); break; //Unknown ID default: case -1: return Error("'%s' : unknown identifier", id_name); break; } return true; }